package src.com.ybu;

import com.ybu.A;
import com.ybu.C;
import com.ybu.D;

/**
 * @ProjectName: shixun
 * @Titile: TestLambda
 * @Author: Jie
 * @Description: TODO
 */
public class TestLambda {
    public static void main(String[] args){
        testA();
        testB();
        testC();
        testD();
    }
    public static void testD(){
        //1.创建D接口匿名内部类对象
        D d1 = new D() {
            @Override
            public int max(int a, int b) {
                return Math.max(a, b);
            }
        };
        //2.将匿名内部类对象改为Lambda表达式
        D d2 = ( a, b)-> a>b?a:b;
        System.out.println(d2.max(10, 20));
        //3.创建D接口的方法引用对象
        D d3 = Math::max;
        int max  = d3.max(1, 2);
        System.out.println(max);
    }

    public static void testC(){
        //1.创建C接口匿名内部类对象
        C c1 = new C() {
            @Override
            public String show(String name) {
                return "name"+name;
            }
        };
        //2.将匿名内部类对象改为Lambda表达式
        C c2 = name-> "name"+name;
        System.out.println(c2.show("张三"));
        //3.创建C接口的方法引用
        C c3 = TestLambda::show4;
        String result = c3.show("王五");
        System.out.println(result);

    }
    public static String show4(String name){
        return "name="+name;
    }

    public static void testB(){
        //1.创建B接口匿名内部类对象
        B b1 = new B() {
            @Override
            public void show(String name) {
                System.out.println("name="+name);
            }
        };
        //创建B接口Lambda表达式对象
        B b2 = name-> System.out.println("name="+name);
        //创建B接口的方法引用对象
        B b3 = System.out::println;
        b3.show("张三");

    }

    public static void testA(){
        //1.创建A接口的匿名内部类对象
        A a1 = new A() {
            @Override
            public void show(String name, int age) {
                System.out.println(name+","+age);
            }
        };
        //2.将匿名内部类对象改成Lambda表达式
        A a2 = ((name,age) -> System.out.println(name+","+age));
        a2.show("张三",18);

        //3.使用方法引用替换Lambda表达式
        A a3 = TestLambda::show2;
        a3.show("李四",20);
    }
    //定义一个成员方法，故意让返回值和形参和A接口中的方法一致
    public static void show2(String name,int age){
        System.out.println("show2:"+name+","+age);
    }
}